A video sequence consists of a series of frames. Each frame is represented by an array of pixels, such as, for example, 720×480 pixels, and each pixel is represented by a data value. Thus, a large volume of data is used to produce each frame.
An increasing number of video products, such as DVD players, digital TV, personal video recorders, multimedia jukeboxes, video-capable cell phones, to name a few, rely on video compression to reduce the number of bits required to store and/or transmit a video sequence. To improve video data compression efficiency, motion estimation may be performed. Motion estimation has proven to be effective in exploiting temporal redundancy of a video sequence by extracting a correlation between adjacent frames. In a sequence of frames, a current frame is predicted from a previous frame known as a reference frame. The current frame is usually divided into blocks or macroblocks. The size of the macroblocks is typically 16×16 pixels, but may vary depending on the compression standard used. Each macroblock in the current frame is compared to regions of the same size in the reference frame in order to locate the best matching macroblock, using a specified error criteria. A motion vector is used to represent the displacement between a macroblock in the reference frame and the matching macroblock in the current frame.
To satisfy the demand for visual communication applications, many video compression standards have been developed. Motion estimation is a central part of many video compression schemes. A key part of the MPEG-4 part 10/H.264 video coding standard requires that the encoder generates motion vectors to represent motion between two or more frames. The standard allows the encoder to generate motion vectors at half or quarter pixel accuracy, where the sub-pixel values are generated by interpolation filtering of existing integer values. This filtering process, known as sub-pixel interpolation, is extremely computation intensive and memory intensive, but is critical to achieving high quality encoding. Performing the task in hardware requires a balance between cycle count, which must be low enough to support low clock frequencies and large frame sizes, power consumption, circuit complexity, chip area and memory bandwidth.
Accordingly there is a need for improved methods and apparatus for sub-pixel interpolation.